Electrophysiology: Redox Modulation of Homopentameric \(\alpha\)-1 Glycine Receptor using Glutathione Disulfide (GSSG) and Glutathione (GSH)

require(tidyverse)
require(tidyr)
require(knitr)
require(dplyr)
require(ggplot2)
require(gganimate)
# cool packages i didn't end up using require(aRtsy) from github
# devtools::install_github('marcusvolz/mathart') require(mathart)
# devtools::install_github('cutterkom/generativeart') require(generativeart)

Background on data

When I was in the second semester of my third year of undergrad, I took a course called “Enzymes,” which was essentially a literature based biochemistry class on specific classes of enzymes. It was very organic chemistry focused–makes sense since biochem is bio-applied orgo– and it inspired me to ask this research question in the Research Neurophysiology class I was taking that semester: how do reduction and oxidation (redox) reagents modulate the chloride current through chloride-selective ligand-gated ion channels (LGIC)?
The chloride LGIC in question here is the Glycine receptor. Glycine receptors mediate inhibitory synaptic transmission through the opening of a chloride-permeable pore that triggers hyperpolarization of the membrane and inhibition of the neuronal firing generated in the central nervous system (CNS). Glycine receptors are pentameric structures comprised of five subunits (\(\alpha\) and \(\beta\)), each composed of four transmembrane domains (Figure 1; Lynch et al., 2004; Du et al., 2015). A central concept of the relationship between ligand binding and channel gating in Cys-loop receptors is the conformation of the Cys-loop correlate swith the functional state of the receptor (Figure 1; Du et al., 2015; Purohit & Auerbach, 2013; Thompson, 2010). The allosteric change in the ligand-binding domain affects the \(\alpha\)-subunits, resulting in the rotations of their inner \(\beta\)-sheets. The rotations of the sheets are transmitted by their connected M2-helices to the pore’s gate resulting in a configuration permeable to the ion. The \(\alpha\)-subunits act as the primary mediators of the conformational change by connecting to the transmembrane portion of the receptor, characterized by a counter-clockwise rotation of the pore’s axis (Du et al., 2015; Unwin et al., 2002).
Reduced glutathione (GSH) and oxidized glutathione (GSSG) are endogenous redox agents naturally present in the CNS at millimolar concentrations (5-10mM) (Calero & Calvaro, 2008). Pan et al. (1995) found, in retinal ganglion cells GSH at 5mM enhanced GABA-activated chloride currents and decreased glycine-activated chloride currents through their respective receptors. Amato et al. (1999) confirmed Pan et al.’s finding in HEK cells, showing at concentrations ranging from 1-10mM, GSH enhanced GABA-activated response in concentration-dependent manner while GSSG caused small inhibitory effects.

GSSG Oxidation

LOSS OF ELECTRONS = OXIDATION:
\(X^+ - e^- = Xº\)
1. Control Ephys Recording Solution (ND)
2. Positive Control: 50µM Glycine in ND
3. Pre-treatment: 5mM GSSG in ND
4. Co-Application 50µM Glycine + 5mM GSSG in ND

load GSSG data

f1 <- "https://raw.githubusercontent.com/slcornett/creative-data-visualization/main/data/2018-04-05_GSSG_Oxidation.csv"
gssg <- read_csv(f1, col_names = TRUE)
## Rows: 321761 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (2): time_s, GSSG_Current_µA
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
gssg <- gssg %>%
    filter(time_s >= 1000, time_s <= 2000)  # make it slightly less giant
head(gssg)
## # A tibble: 6 × 2
##   time_s GSSG_Current_µA
##    <dbl>           <dbl>
## 1  1000           0.0292
## 2  1000.          0.0262
## 3  1000.          0.0278
## 4  1000.          0.0281
## 5  1000.          0.0261
## 6  1000.          0.0294

GSSG Trace Plots

# static plot
gssg_p1 <- ggplot(data = gssg, aes(x = time_s, y = GSSG_Current_µA, color = GSSG_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_line(show.legend = FALSE) + ggtitle("Oxidative Effect of GSSG on Glycine-Receptor") + theme_classic()
gssg_p1

# animated! like a heart beat
gssg_a1 <- ggplot(data = gssg, aes(x = time_s, y = GSSG_Current_µA, color = GSSG_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_jitter(show.legend = FALSE) + ggtitle("Oxidative Effect of GSSG on Glycine-Receptor") + theme_classic() +
    labs(x = "time (s): {frame_time}", y = "Current uA") + # gganimate labs(x = "time (s):
    labs(x = "time (s): {frame_time}", y = "Current uA") + # gganimate {frame_time}", y = "Current
    labs(x = "time (s): {frame_time}", y = "Current uA") + # gganimate uA") + # gganimate
transition_time(time = gssg$time_s) + shadow_wake(wake_length = 0.2, alpha = FALSE) + ease_aes("linear")
gssg_a1

# with a trace
gssg_a2 <- ggplot(data = gssg, aes(x = time_s, y = GSSG_Current_µA, color = GSSG_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_jitter(show.legend = FALSE) + ggtitle("Oxidative Effect of GSSG on Glycine-Receptor") + theme_classic() +
    labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate labs(x = "time (s):
    labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate {frame_time}", y = "Current
    labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate µA") + # gganimate
transition_time(time = gssg$time_s) + shadow_wake(wake_length = 0.1, alpha = FALSE) + shadow_mark(alpha = 0.3,
    size = 1) + ease_aes("linear")
gssg_a2

GSSG Trace Plots for Art

Here I plot the trace for the Glycine receptor exposed to GSSG with its absolute value trace. I think they look cool.

# adding the absolute value to plot bot the current and absolute value of the current together
# because i bet it would look very cool
gssg <- gssg %>%
    mutate(abGSSG_Current_µA = abs(GSSG_Current_µA))
# gather(key = 'Current', value = 'value', abGSSG_Current_µA ) # collapses 2 variables into
# key-value pairs
head(gssg)  # cool absolute value present in the dataset
## # A tibble: 6 × 3
##   time_s GSSG_Current_µA abGSSG_Current_µA
##    <dbl>           <dbl>             <dbl>
## 1  1000           0.0292            0.0292
## 2  1000.          0.0262            0.0262
## 3  1000.          0.0278            0.0278
## 4  1000.          0.0281            0.0281
## 5  1000.          0.0261            0.0261
## 6  1000.          0.0294            0.0294
# try to plot two traces on the same plot static
gssg_p2 <- ggplot(data = gssg, aes(x = time_s)) + geom_line(aes(y = GSSG_Current_µA, color = GSSG_Current_µA),
    show.legend = FALSE) + geom_line(aes(y = abGSSG_Current_µA, color = abGSSG_Current_µA), show.legend = FALSE) +
    scale_color_continuous(type = "viridis") + ggtitle("Oxidative Effect of GSSG on Glycine-Receptor") +
    theme_classic() + labs(x = "time (s)", y = "Current µA")
gssg_p2

# animated line
gssg_a3 <- ggplot(data = gssg, aes(x = time_s)) + geom_jitter(aes(y = GSSG_Current_µA, color = GSSG_Current_µA),
    show.legend = FALSE) + geom_jitter(aes(y = abGSSG_Current_µA, color = abGSSG_Current_µA), show.legend = FALSE) +
    scale_color_continuous(type = "viridis") + ggtitle("Oxidative Effect of GSSG on Glycine-Receptor") +
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate theme_classic()
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate + labs(x =
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate "time (s):
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate {frame_time}",
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate y =
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate "Current
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate µA") + #
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate gganimate
transition_time(time = gssg$time_s) + shadow_wake(wake_length = 0.1, alpha = FALSE) + shadow_mark(alpha = 0.3,
    size = 1) + ease_aes("linear")
gssg_a3

# i think it indeed looks very cool

GSH Reduction

GAIN OF ELECTRIONS = REDUCTION:
\(X^+ + e^- = Xº\)
1. Control Ephys Recording Solution (ND)
2. Positive Control: 50µM Glycine in ND
3. Pre-treatment: 5mM GSH in ND
4. Co-Application 50µM Glycine + 5mM GSH in ND

load GSH data

f2 <- "https://raw.githubusercontent.com/slcornett/creative-data-visualization/main/data/2018-04-12_GSH_Reduction.csv"
gsh <- read_csv(f2, col_names = TRUE)
## Rows: 237740 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (2): time_s, GSH_Current_µA
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
gsh <- gsh %>%
    filter(time_s >= 300, time_s <= 1600)  # make it slightly less giant, frame the cool stuff
head(gsh)
## # A tibble: 6 × 2
##   time_s GSH_Current_µA
##    <dbl>          <dbl>
## 1   300          0.0517
## 2   300.         0.0495
## 3   300.         0.0517
## 4   300.         0.0508
## 5   300.         0.0505
## 6   300.         0.052

GSH Trace Plots

# second verse, same as the first, but now with a reducing agent doing something unexpected statics
# plot
gsh_p1 <- ggplot(data = gsh, aes(x = time_s, y = GSH_Current_µA, color = GSH_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_line(show.legend = FALSE) + ggtitle("Reductive Effect of GSH on Glycine-Receptor") + theme_classic() +
    labs(x = "time (s)", y = "Current (µA)")
gsh_p1

# animated! like a heart beat
gsh_a1 <- ggplot(data = gsh, aes(x = time_s, y = GSH_Current_µA, color = GSH_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_jitter(show.legend = FALSE) + ggtitle("Reductive Effect of GSH on Glycine-Receptor") + theme_classic() +
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate labs(x = "time (s):
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate {frame_time}", y =
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate "Current (µA)") + #
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate gganimate
transition_time(time = gsh$time_s) + shadow_wake(wake_length = 0.2, alpha = FALSE) + ease_aes("linear")
gsh_a1

# with a trace
gsh_a2 <- ggplot(data = gsh, aes(x = time_s, y = GSH_Current_µA, color = GSH_Current_µA)) + scale_color_continuous(type = "viridis") +
    geom_jitter(show.legend = FALSE) + ggtitle("Reductive Effect of GSH on Glycine-Receptor") + theme_classic() +
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate labs(x = "time (s):
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate {frame_time}", y =
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate "Current (µA)") + #
    labs(x = "time (s): {frame_time}", y = "Current (µA)") + # gganimate gganimate
transition_time(time = gsh$time_s) + shadow_wake(wake_length = 0.1, alpha = FALSE) + shadow_mark(alpha = 0.3,
    size = 1) + ease_aes("linear")
gsh_a2

GHS Trace Plots for Art

As above, so below: here I plot the trace for the Glycine receptor exposed to GSH with its absolute value trace. Yeah, they definitely look cool.

# adding the absolute value to plot bot the current and absolute value of the current together
# because i bet it would look very cool
gsh <- gsh %>%
    mutate(abGSH_Current_µA = abs(GSH_Current_µA))
head(gsh)  # cool absolute value present in the dataset
## # A tibble: 6 × 3
##   time_s GSH_Current_µA abGSH_Current_µA
##    <dbl>          <dbl>            <dbl>
## 1   300          0.0517           0.0517
## 2   300.         0.0495           0.0495
## 3   300.         0.0517           0.0517
## 4   300.         0.0508           0.0508
## 5   300.         0.0505           0.0505
## 6   300.         0.052            0.052
# try to plot two traces on the same plot static 2 lines
gsh_p2 <- ggplot(data = gsh, aes(x = time_s)) + geom_line(aes(y = GSH_Current_µA, color = GSH_Current_µA),
    show.legend = FALSE) + geom_line(aes(y = abGSH_Current_µA, color = abGSH_Current_µA), show.legend = FALSE) +
    scale_color_continuous(type = "viridis") + ggtitle("Reductive Effect of GSH on Glycine-Receptor") +
    theme_classic() + labs(x = "time (s)", y = "Current µA")
gsh_p2

# animated line
gsh_a3 <- ggplot(data = gsh, aes(x = time_s)) + geom_jitter(aes(y = GSH_Current_µA, color = GSH_Current_µA),
    show.legend = FALSE) + geom_jitter(aes(y = abGSH_Current_µA, color = abGSH_Current_µA), show.legend = FALSE) +
    scale_color_continuous(type = "viridis") + ggtitle("Reductive Effect of GSH on Glycine-Receptor") +
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate theme_classic()
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate + labs(x =
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate "time (s):
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate {frame_time}",
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate y =
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate "Current
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate µA") + #
    theme_classic() + labs(x = "time (s): {frame_time}", y = "Current µA") + # gganimate gganimate
transition_time(time = gsh$time_s) + shadow_wake(wake_length = 0.1, alpha = FALSE) + shadow_mark(alpha = 0.3,
    size = 1) + ease_aes("linear")
gsh_a3

References

Amato, A., Connolly, C. N., Moss, S. J., & Smart, T. G. (1999). Modulation of neuronal and recombinant GABA A receptors by redox reagents. The Journal of Physiology, 517(1), 35–50. https://doi.org/10.1111/j.1469-7793.1999.0035z.x

Calero, C. I., & Calvo, D. J. (2008). Redox modulation of homomeric ρ1 GABAC receptors: Redox modulation of GABAρ1 receptors. Journal of Neurochemistry, 105(6), 2367–2374. https://doi.org/10.1111/j.1471-4159.2008.05319.x

Du, J., Lü, W., Wu, S., Cheng, Y., & Gouaux, E. (2015). Glycine receptor mechanism elucidated by electron cryo-microscopy. Nature, 526(7572), 224–229. https://doi.org/10.1038/nature14853

Lynch, J. W. (2004). Molecular structure and function of the glycine receptor chloride channel. Physiological Reviews, 84(4), 1051–1095. https://doi.org/10.1152/physrev.00042.2003

Pan, Z. H., Bahring, R., Grantyn, R., & Lipton, S. A. (1995). Differential modulation by sulfhydryl redox agents and glutathione of GABA- and glycine-evoked currents in rat retinal ganglion cells. Journal of Neuroscience, 15(2), 1384–1391. https://doi.org/10.1523/JNEUROSCI.15-02-01384.1995

Purohit, P., & Auerbach, A. (2013). Loop C and the mechanism of acetylcholine receptor–channel gating. Journal of General Physiology, 141(4), 467–478. https://doi.org/10.1085/jgp.201210946

Thompson, A. J., Lester, H. A., & Lummis, S. C. R. (2010). The structural basis of function in Cys-loop receptors. Quarterly Reviews of Biophysics, 43(4), 449–499. https://doi.org/10.1017/S0033583510000168

Unwin, N., Miyazawa, A., Li, J., & Fujiyoshi, Y. (2002). Activation of the nicotinic acetylcholine receptor involves a switch in conformation of the α subunits. Journal of Molecular Biology, 319(5), 1165–1176. https://doi.org/10.1016/S0022-2836(02)00381-9